Date		:	26 aout 1991
		Protection	:	MOT DE PASSE ( manivelle )
		Programme	:       COUGAR FORCE
		Outils		:	SOFT-ICE V2.50
		Fichier		:	FRED8.COM	
		Temps pass�	:	2 HEURES
		Soci�t�		:	INFERENCE M.D.O.
		Divers	        :	D�j� essay� plusieurs fois.
		Origine		:	INDONESIE
		Num�ro		:	137

	
	Ci dessous la chaine de COUGAR FORCE:

	CS=0FF7
	CS:09FE C45EF8		LES	BX,[BP-08]
	CS:0A01 268A07		MOV	AL,ES:[BX] ; MOV BYTE PTR ES:[BX],40
	CS:0A04 B400		MOV	AH,00        �����������������������
	CS:0A06 257000		AND	AX,0070	
	CS:0A09 B104		MOV	CL,04	
	CS:0A0B D3F8		SAR	AX,CL	
	CS:0A0D C45EF4		LES	BX,[BP-0C]
	CS:0A10 268A17		MOV	DL,ES:[BX] ; MOV BYTE PTR ES:[BX],04
	CS:0A13 B600		MOV	DH,00        �����������������������
	CS:0A15 3BC2		CMP     AX,DX   
	CS:0A17 741C		JZ	0A35	   ; JMP 0A35	
	CS:0A19 B8FFFF		MOV	AX,FFFF      �������� 
	CS:0A1C 50		PUSH	AX

	Il suffit de placer ces trois instructions � la suite les unes des
	autres � partir de 0A01 comme dans GEISHA. Puis de cr�er un fichier
	FRED8.COM qui d�tourne l'INT 21 sous-fonction 3D.
	Malheureusement le programme se plante apr�s deux ou trois appels
	de cet INT ! M�me ph�nom�ne que pour SUPER_C.
	J'essaie avec une INT "vide" c'est � dire sans traitement et sans
	PUSH ni POP des registres; le programme ne se plante plus.
	J'y replace les PUSH et POP et cel� fonctionne toujours. J'active le
	premier test sans rien d'autre ( test du drapeau ) et �a se plante !
	Cel� ne signifie qu'une chose: avec mon test je modifie forcement les
	drapeaux et comme je ne vois pas de PUSHF ni de POPF au d�but et � la
	fin de ma routine je d�cide d'en ins�rer. 
	Et cel� fonctionne. C'est � se demander comment les pr�c�dents FRED
	ont fait pour tourner !

	Ci-dessous la routine en assembleur:

 ;	PATCH POUR LE PROGRAMME COUGAR FORCE
 ;	FREDDY_SOFT

 code      segment
           org    100h
           assume cs:code

 start:    jmp    installe	; On va installer la routine r�sidente...

 cr        equ    0dh
 lf        equ    0ah
 flag      equ    3Dh    ; Contenu de AH devant �tre test�.
 adr_ip    equ    4701h  ; En CS:4701 il faut avoir 268A

 instok    db     cr,lf,'    D�tournement de l',39,'INT 21 sous-fonction 3D'
	   db     cr,lf
	   db     '                  ....FREDDY_SOFT....','$'
 drap      db     0,0
 elimine   db     cr,lf,'J',39,'ai en principe tout remis en l',39,'�tat....'
	   db     cr,lf,'$'

 int21     label  dword	; sauvegarde des adresses SEG:OFF de l'INT21 d'origine
 i40off    db     0,0	; OFFSET
 i40seg    db     0,0	; SEGMENT

 tsrint40  proc   far
           jmp short apr�s_id
	   db    'FR'	; On intercalle au d�but du code un identificateur
 apr�s_id: pushf	; Un PUSHF qui n'a pas de POPF ! voir FREDCOM.exp
	   push ds	;
	   push dx	;
           push cx	; On ne sauve que les registres utilis�s... 
	   push bx	;
	   push ax	;
	   cmp byte ptr [drap],1	; Si 1 on devient transparent.
	   jz suite	; Saut � l'INT 21 toutes fonctions valid�es.
	   cmp ah,flag	; AH = 3D.
	   jnz suite	; Si non on traite les INT 21 normalement.
	   mov dx,sp	; On sauve SP dans DX.
	   mov cx,20
incr:      pop ds
           dec cx
           jz s	
	   cmp word ptr ds:[adr_ip+5],7025h
           jnz incr
	   mov bx,[adr_ip]     
           mov word ptr [bx],0c626h
           add bx,2
	   mov word ptr [bx],4007h
	   add bx,2
	   mov word ptr [bx],0c626h
	   add bx,2
	   mov word ptr [bx],0407h
	   add bx,2
	   mov word ptr [bx],2aebh
	   mov byte ptr [drap],1h
s:         mov sp,dx	; On restaure SP.
suite:	   pop ax	; On restaure tous les registres
	   pop bx
	   pop cx
	   pop dx
	   pop ds 
           popf
	   jmp   int21	; Appel de l'INT21 officielle
 tsrint40  endp
 eor: